// 搜索模块 通用属性方法 - 组合式函数
import { ref, getCurrentInstance } from 'vue'
import dayjs from 'dayjs';
import axios from "@/libs/request.js";

export function useSearchItemComposable() {
    const instance = getCurrentInstance()
    const value = ref("") // 当前选中的值的，对外暴露属性，仅供外部查询使用

    // 初始化，默认值等
    const init = () => {
        // setTimeout(() => {
        //     // debugger
        //     if (!!instance?.attrs.value) {
        //         // debugger
        //         value.value = instance.attrs.value
        //         // let params = {
        //         //     value: instance.attrs.value,
        //         //     type: 'init'
        //         // }
        //         // instance?.emit("changeEvent", params)
        //     }
        // }, 1000)
    }

    // 选择改变触发事件
    const changeEvent = (val) => {
        value.value = val
        let params = {
            value: val,
            type: 'change'
        }
        instance?.emit("changeEvent", params)
    }
    // 查询栏目 点击 重置清空数据，外部调用
    const clear = (fieldName, controlType, searchForm, paramsItem) => {
        if (!!fieldName && !!controlType && searchForm) {
            // 重置
            if (!!value.value && !!searchForm[fieldName]) {
                // searchForm[fieldName] = ""
                // value.value = ""
                let defaultValue = paramsItem.defaultValue
                switch (controlType) {
                    case "date":
                    case "dateTime":
                    case 'month':
                        let newDefaultVal = setDateTimeDefaultVal(controlType, defaultValue)
                        searchForm[fieldName] = newDefaultVal
                        break
                    case 'number':
                        let newDefaultVal2 = Number(defaultValue)
                        searchForm[fieldName] = newDefaultVal2
                        break
                    default:
                        searchForm[fieldName] = defaultValue
                        break
                }
                value.value = ""
            }
        }
    }
    // 设置时间格式默认值 (当前日期:curdate 当前日期-1月:subtract-1-month  当前日期+1天:add-1-day  当前日期-1年:add-2-year)
    const setDateTimeDefaultVal = (type, defaultVal) => {
        let dValue = null
        let dateFormatStr = ""
        // 指定日期 格式化 格式
        switch (type) {
            case "date":
                dateFormatStr = 'YYYY-MM-DD'
                break;
            case "dateTime":
                dateFormatStr = 'YYYY-MM-DD HH:mm:ss'
                break;
            // case 'month':
            //     dateFormatStr = 'YYYY-MM'
            //     break
            default:
                dateFormatStr = ""
                break
        }
        if (!!defaultVal) {
            if (defaultVal == 'curdate') {
                // 当前日期
                dValue = dayjs().format(dateFormatStr);
            } else if (defaultVal.includes('-')) {
                // 指定日期加减
                //dayjs().add(7, 'day').format('YYYY-MM-DD');
                //dayjs().subtract(2, 'hour').format('YYYY-MM-DD HH:mm:ss');
                let daysetArray = defaultVal.split('-')
                dValue = dayjs()[daysetArray[0]](Number(daysetArray[1]), daysetArray[2]).format(dateFormatStr)
            } else {
                //空日期
                dValue = null
            }
        }

        return dValue
    }
    // 设置时间范围格式默认值 (当前日期:curdate 当前日期-1月:subtract-1-month  当前日期+1天:add-1-day  当前日期-1年:add-2-year)
    const setDateTimeRangeDefaultVal = (type, defaultVal) => {
        const end = new Date();
        const start = new Date();

        try {
            let dValue = [start, end]
            let dateFormatStr = ""
            let defaultValList = defaultVal.split('#')
            // 指定日期 格式化 格式
            switch (type) {
                case "daterange":
                    dateFormatStr = 'YYYY-MM-DD'
                    break;
                case "datetimerange":
                    dateFormatStr = 'YYYY-MM-DD HH:mm:ss'
                    break;
                default:
                    dateFormatStr = ""
                    break
            }
            // 开始时间 和 结束时间
            // curdate#curdate
            if (!!defaultValList[0]) {
                if (defaultValList[0] == 'curdate') {
                    // 当前日期
                    dValue[0] = dayjs().format(dateFormatStr);
                } else if (defaultValList[0].includes('-')) {
                    // 指定日期加减
                    //dayjs().add(7, 'day').format('YYYY-MM-DD');
                    //dayjs().subtract(2, 'hour').format('YYYY-MM-DD HH:mm:ss');
                    let daysetArray = defaultValList[0].split('-')
                    dValue[0] = dayjs()[daysetArray[0]](Number(daysetArray[1]), daysetArray[2]).format(dateFormatStr)
                } else {
                    //空日期
                    dValue[0] = start
                }
            }
            if (!!defaultValList[1]) {
                if (defaultValList[1] == 'curdate') {
                    // 当前日期
                    dValue[1] = dayjs().format(dateFormatStr);
                } else if (defaultValList[1].includes('-')) {
                    // 指定日期加减
                    //dayjs().add(7, 'day').format('YYYY-MM-DD');
                    //dayjs().subtract(2, 'hour').format('YYYY-MM-DD HH:mm:ss');
                    let daysetArray = defaultValList[1].split('-')
                    dValue[1] = dayjs()[daysetArray[0]](Number(daysetArray[1]), daysetArray[2]).format(dateFormatStr)
                } else {
                    //空日期
                    dValue[1] = end
                }
            }
            return dValue
        } catch (error) {
            return [start, end]
        }
    }
    // 此处为VFORM表单的通用参数
    // 通过数据集ID 从数据库中获取数据列表
    // postUrl= 'query1' 来自选择数据源 选择加载API,大部分为为配置中一级options下的actionName
    const getDBDataByActionName = async (loadDataConfig) => {
        //debugger
        let _url = `/api/MD/DataSet/GetListByDataSetId` // 固定取值地址
        let params = {
            Id: loadDataConfig?.CDATASET_ID,
            Parameter: {}
              // Id: loadDataConfig?.actionParams?.CDATASET_ID,
              // Parameter: formatQuery(loadDataConfig?.actionParams?.query)
        }
        // debugger
        if (!params.hasOwnProperty('Id') || !!!params.Id) {
            console.error("====DataSetId 为空，跳过查询====")
            return
        }
        let dataList = []
        await axios.request({
            url: _url,
            method: "post",
            data: params,
        }).then(res => {
            if (!!res.Success) {
                if ([4, 5, 6].includes(res.Data)) {
                    res.Datas = JSON.parse(res.Datas)
                }
                if (res && res.Datas) {
                    dataList = res.Datas
                }
            }
        });
        return dataList
    }

    // 格式化查询参数
    const formatQuery = (queryObj) => {
        // debugger
        let _formatData = {}
        if (queryObj && Object.keys(queryObj).length > 0) {
            for (const [key, value] of Object.entries(queryObj)) {
                _formatData[key] = value.value
            }
        }
        return _formatData
    }

    return {
        value,
        init,
        changeEvent,
        clear,
        setDateTimeDefaultVal,
        setDateTimeRangeDefaultVal,
        getDBDataByActionName,
        formatQuery
    }
}